factorization method